package inmobiliaria.frsf.model;

import inmobiliaria.frsf.enums.EstadoInmuebleEnum;
import inmobiliaria.frsf.enums.OrientacionEnum;
import inmobiliaria.frsf.enums.TipoInmuebleEnum;

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Inmueble {
	private Integer idInmueble;
	private Propietario propietario;
	private Domicilio domicilio;
	private DatosAdicionales datos;
	private Integer tipoInmueble;
	private Integer estado;
	private Float precioVenta;
	private Calendar fechaAlta;
	private Date fechaAltaCalendar;

	public Inmueble() {
		this.idInmueble = null;
		this.propietario = new Propietario();
		this.domicilio = new Domicilio();
		this.datos = new DatosAdicionales();
		this.tipoInmueble = TipoInmuebleEnum.CASA.getId();
		this.estado = EstadoInmuebleEnum.DISPONIBLE.getId();
		this.precioVenta = null;
		this.fechaAlta = null;
	}

	public Inmueble(Integer id_inmueble, Domicilio domicilio,
			DatosAdicionales datos, int tipo_inmueble, int estado,
			Float precio_venta, Calendar fecha_alta, Propietario propietario) {
		this.idInmueble = id_inmueble;
		this.domicilio = domicilio;
		this.datos = datos;
		this.tipoInmueble = tipo_inmueble;
		this.estado = estado;
		this.precioVenta = precio_venta;
		this.fechaAlta = fecha_alta;
		this.propietario = propietario;
	}

	/**
	 * @return the id
	 */
	public Integer getIdInmueble() {
		return idInmueble;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setIdInmueble(Integer id) {
		this.idInmueble = id;
	}

	/**
	 * @return the domicilio
	 */
	public Domicilio getDomicilio() {
		return domicilio;
	}

	/**
	 * @param domicilio
	 *            the domicilio to set
	 */
	public void setDomicilio(Domicilio domicilio) {
		this.domicilio = domicilio;
	}

	/**
	 * @return the datos
	 */
	public DatosAdicionales getDatos() {
		return datos;
	}

	/**
	 * @param datos
	 *            the datos to set
	 */
	public void setDatos(DatosAdicionales datos) {
		this.datos = datos;
	}

	/**
	 * @return the tipoInmueble
	 */
	public int getTipoInmueble() {
		return tipoInmueble;
	}
	
	/**
	 * @return the String tipoInmueble
	 */
	public String getTipoInmuebleString() {
		return TipoInmuebleEnum.getDescripcion(tipoInmueble);
	}

	/**
	 * @param tipoInmueble
	 *            the tipoInmueble to set
	 */
	public void setTipoInmueble(int tipoInmueble) {
		this.tipoInmueble = tipoInmueble;
	}

	/**
	 * @return the estado
	 */
	public int getEstado() {
		return estado;
	}
	
	/**
	 * @return the String tipoInmueble
	 */
	public String getEstadoInmuebleString() {
		return EstadoInmuebleEnum.getDescripcion(estado);
	}

	/**
	 * @param estado
	 *            the estado to set
	 */
	public void setEstado(int estado) {
		this.estado = estado;
	}

	/**
	 * @return the precioVenta
	 */
	public Float getPrecioVenta() {
		return precioVenta;
	}

	/**
	 * @param precioVenta
	 *            the precioVenta to set
	 */
	public void setPrecioVenta(Float precioVenta) {
		this.precioVenta = precioVenta;
	}

	/**
	 * @return the fechaAlta
	 */
	public Calendar getFechaAlta() {
		return fechaAlta;
	}
	
	public String getFechaAltaString() {
		DateFormat date = DateFormat.getDateInstance(DateFormat.MEDIUM);
		String s =  date.format(fechaAlta.getTime());
		return s;
	}
	
	public Date getFechaAltaFormat() {
		return fechaAlta.getTime();
	}

	/**
	 * @param fechaAlta
	 *            the fechaAlta to set
	 */
	public void setFechaAlta(Calendar fechaAlta) {
		this.fechaAlta = fechaAlta;
	}
	
	public void setTipoInmueble(Integer tipoInmueble) {
		this.tipoInmueble = tipoInmueble;
	}

	public void setEstado(Integer estado) {
		this.estado = estado;
	}

	public Propietario getPropietario() {
		return propietario;
	}

	public void setPropietario(Propietario propietario) {
		this.propietario = propietario;
	}

	public String getUbicacionGeografica() {
		return domicilio.getUbicacionGeografica();
	}
	
	public String getDatosPropietario() {
		return propietario.getNombre() + " " + propietario.getApellido() + " - Tel: " +
				propietario.getTelefono();
	}
	
	/**
	 * @return the fechaAltaCalendar
	 */
	public Date getFechaAltaCalendar() {
		return fechaAltaCalendar;
	}

	/**
	 * @param fechaAltaCalendar the fechaAltaCalendar to set
	 */
	public void setFechaAltaCalendar(Date fechaAltaCalendar) {
		this.fechaAlta = new GregorianCalendar();
		this.fechaAlta.setTime(fechaAltaCalendar);
	}
	
	public String getStringDatos(){
		String stringDatos = "";
		if(datos.getOrientacion() != null)
		stringDatos += "Orientacion: " + OrientacionEnum.getDescripcion(datos.getOrientacion()) + ", ";
		if(datos.getFondoM()!=null)
		stringDatos += "Dimensiones: " + datos.getFrenteM() + "x" + datos.getFondoM() + ", ";
		if(datos.getSuperficieTotalM2()!=null)
		stringDatos += "Superficie total: " + datos.getSuperficieTotalM2() + "m², ";
		if(datos.getPisos()!=null)
		stringDatos += "Cant Pisos: " + datos.getPisos() + ", ";
		if(datos.getAntiguedad()!=null)
		stringDatos += "Antigüedad: " + datos.getAntiguedad() + ", ";
		if(datos.getBanios()!=null)
		stringDatos += "Cant Baños: " + datos.getBanios()+ ", ";
		if(datos.getDormitorios()!=null)
		stringDatos += "Dormitorios: " + datos.getDormitorios() + ", ";
		stringDatos += "Cloacas: " + (datos.isCloacas()==true?"SI":"NO") + ", ";
		stringDatos += "Piscina: " + (datos.isPiscina()==true?"SI":"NO") + ", ";
		stringDatos += "Gas: " + (datos.isGasNatural()==true?"SI":"NO") + ", ";
		stringDatos += "Agua: " + (datos.isAguaCorriente()==true?"SI":"NO") + ", ";
		stringDatos += "Lavadero: " + (datos.isLavadero()==true?"SI":"NO") + ", ";
		stringDatos += "Pavimento: " + (datos.isPavimento()==true?"SI":"NO");
		
		return stringDatos;
	}
}